#!/usr/bin/env python3
"""
检查app子目录下的数据库文件结构
"""
import sqlite3
import os

# 获取当前目录
base_dir = os.path.dirname(os.path.abspath(__file__))
# app子目录下的数据库路径
app_db_path = os.path.join(base_dir, "app", "flowscape.db")

print("=" * 60)
print("检查app子目录下的数据库文件")
print("=" * 60)
print(f"数据库文件: {app_db_path}")
print(f"文件存在: {os.path.exists(app_db_path)}")

if not os.path.exists(app_db_path):
    print("错误: 数据库文件不存在!")
    exit(1)

# 连接到数据库
print("\n连接到app子目录下的数据库...")
conn = sqlite3.connect(app_db_path)
cursor = conn.cursor()

# 1. 检查表是否存在
print("\n1. 检查表是否存在:")
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='file_uploads';")
table_exists = cursor.fetchone()
print(f"file_uploads表存在: {bool(table_exists)}")

# 2. 检查表结构
print("\n2. 文件上传表结构:")
print("-" * 60)
print(f"{'列名':<30} | {'类型':<20} | {'默认值':<10}")
print("-" * 60)
columns = []
if table_exists:
    cursor.execute("PRAGMA table_info(file_uploads);")
    columns = cursor.fetchall()
    
    # 检查是否有departure_retention_status列
    has_departure_column = False
    for col in columns:
        col_id, col_name, col_type, not_null, default_val, pk = col
        print(f"{col_name:<30} | {str(col_type):<20} | {str(default_val):<10}")
        if col_name == 'departure_retention_status':
            has_departure_column = True
    
    print("-" * 60)
    print(f"departure_retention_status列存在: {has_departure_column}")
    print(f"总列数: {len(columns)}")
    
    # 如果缺少列，尝试添加
    if not has_departure_column:
        print("\n发现问题: app子目录下的数据库缺少departure_retention_status列！")
        print("这可能是导致错误的原因")
        
        print("\n建议解决方案:")
        print("1. 删除app子目录下的数据库文件，让应用使用正确的主目录数据库")
        print("2. 或者为app子目录下的数据库添加缺失的列")

# 关闭连接
conn.close()

print("\n=" * 30)
print("解决方案建议")
print("=" * 60)
print("问题原因: 发现两个数据库文件，应用程序可能连接到了错误的数据库")
print("\n选项1: 删除错误的数据库文件 (推荐)")
print(f"  rm {app_db_path}")
print("  然后重启应用，它将使用主目录下的正确数据库")
print("\n选项2: 为app子目录下的数据库添加缺失的列")
print("  运行迁移脚本更新app子目录下的数据库")
print("\n选项3: 确保所有操作都使用同一个数据库文件")
print("  更新配置确保所有组件使用相同的数据库路径")
print("=" * 60)